home *** CD-ROM | disk | FTP | other *** search
- /* =======================================================================
- LLS.h Generic Singly Linked List for fixed size data-items.
-
- v1.00 94-08-21
-
- _____ This version is Public Domain.
- /_|__| A.Reitsma, Delft, The Netherlands.
- / | \ --------------------------------------------------------------- */
-
- #include "defines.h"
-
- #ifndef FAR
- #include "portable.h"
- #endif
-
- #ifndef LL__ERR_H
- #define LL__ERR_H /* same values used in LLD ... */
-
- enum ListErrors /* return values for LLScheck() */
- { /* The highest value is returned */
-
- LIST_NO_PROBLEMS, /* All is OK (multiple use) */
- LIST_EMPTY, /* No data available */
- LIST_ERRORS, /* Dummy to separate warnings from */
- /* ---- REAL errors --------------------------- */
- LIST_CORRUPT1, /* invalid last node pointer: Not NULL */
- /* (empty list: ptr should have been NULL) */
- LIST_CORRUPT2, /* invalid current node pointer: Not NULL */
- /* (empty list: ptr should have been NULL) */
- LIST_CORRUPT3, /* invalid last node pointer: Not really last. */
- LIST_CORRUPT4, /* invalid last node pointer: Not in list. */
- LIST_ERR_LAST, /* invalid last node pointer: NULL */
- LIST_CORRUPT5, /* invalid current node pointer: Not in list. */
- LIST_CORRUPT6, /* invalid current->next node pointer: NULL */
- /* although the list is not empty */
- LIST_CORRUPT7, /* NULL current node pointer */
- LIST_ERR_HEAD, /* NULL first node pointer */
- LIST_NOT_CREATED, /* List deleted or not created */
- LIST_INV_NUMBER, /* List number out of range */
- LIST_SYSTEM_NULL, /* List system not intialized */
- };
- /* NOTE: 'invalid last node pointer' errors will ONLY occur */
- /* when LLS.c is compiled with USE_LASTPTR defined ... */
-
- typedef int (*CompFunPtr)( const void *, const void * );
- /* simplifies declarations */
- #endif
- #ifndef LLS_H
- #define LLS_H
-
- /* ---- LL system management and maintenance -------------------------- */
- int LLSsystemInit( int ListCount );
- /* returns -1 on failure. It is not required to call it. */
- /* A second call does nothing: ListCount is ignored. */
-
- int LLScreate( int ItemSize );
- /* returns list number to use or -1 on failure. */
- /* MUST be called before using a list. */
- /* Calls LLsystemInit if necessary. */
-
- void LLSdelete( int List ); /* delete entire list, data is NOT free()'d */
-
- int LLScheck( int List ); /* returns enum ListErrors value */
- /* its primary purpose is debugging. */
-
- /* ---- Node management --------------------------------------------------
- Functions changing current node pointer to the new node.
- Each created list has its own -- fixed -- datasize. See LLcreate().
- An ellipsis "..." indicates the data to insert.
- */
- int LLSnodeInsert( int List, ... ); /* insert BEFORE current node */
- int LLSnodeAdd( int List, ... ); /* insert AFTER current node */
- /* a return value of -1 indicates a memory allocation problem. */
-
- /* Functions NOT changing the current node pointer.
- Especially intended for implementation of Queue's and Stacks.
- */
- int LLSnodePrepend( int List, ... ); /* insert as first node */
- int LLSnodeAppend( int List, ... ); /* insert as last node */
- /* a return value of -1 indicates a memory allocation problem. */
-
- /* The following four functions are essentially the same as the preceeding
- four. The data is however not passed by value but by reference.
- */
- int LLSnodeInsertFrom( int List, void * Source );
- int LLSnodeAddFrom( int List, void * Source );
- int LLSnodePrependFrom( int List, void * Source );
- int LLSnodeAppendFrom( int List, void * Source );
-
- void LLSnodeDelete( int List ); /* remove current node */
- /* current node ptr moved to next node. UNLESS the deleted node */
- /* was the last node: then current ptr moved to previous node */
-
- int LLSnodeFind( int List, CompFunPtr Compare, void * DataPtr );
- /* Find *DataPtr in the List using the *Compare function. */
- /* Returns the return value of *Compare. 0 == equal == found. */
- /* non-zero == not found. Current node is set to found node. */
- /* Returns 2 for an empty list. */
- /* First checked node is current node. */
- /* A NULL Compare-function defaults to the use of memcmp() with */
- /* the list's itemsize as third (size) parameter. */
- /* simple implementation. FindFirst and FindNext may be needed. */
-
- /* ---- current node pointer management ----------------------------------
- These functions change the current node pointer and return 1 when there
- was a change. A return of 0 indicates trying to move past the begin or
- the end of the list, or an empty list. The return value is intended for
- iteration purposes. I.e. stopping a scan through a list.
- */
- int LLSnodePtr2First( int List );
- int LLSnodePtr2Last( int List );
- int LLSnodePtr2Next( int List );
- int LLSnodePtr2Prev( int List );
-
- /* ---- stored data management -------------------------------------------
- return typed data:
- */
- int LLSnodeInt( int List );
- long LLSnodeLong( int List );
- void * LLSnodePtr( int List );
- void FAR * LLSnodeFptr( int List );
-
- /* 'return' typeless data. The return value is the size of the data.
- The data is transferred to Destination.
- If 'Destination' is NULL, the only action is returning the size.
- */
- int LLSnodeDataTo( int List, void * Destination );
-
- #endif
- /* ==== LLS.h end ==================================================== */
-